package cn.djb.day19;

/**
 * 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
 * <p>
 * 百度百科中最近公共祖先的定义为：“对于有根树 T 的两个结点 p、q，最近公共祖先表示为一个结点 x，满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。”
 */
class Solution_2 {

    /**
     * 迭代
     *
     * @param root
     * @param p
     * @param q
     * @return
     */
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {

        while (null != root){
            if (root.val > p.val && root.val > q.val){
                root = root.left;
            }else if (root.val < p.val && root.val < q.val){
                root = root.right;
            }else {
                break;
            }

        }
        return root;

    }

    /**
     * 递归
     *
     * @param root
     * @param p
     * @param q
     * @return
     */
    public TreeNode recur(TreeNode root, TreeNode p, TreeNode q) {

        if (root.val > p.val && root.val > q.val){
            return recur(root.left,p,q);
        }else if (root.val < p.val && root.val < q.val){
            return recur(root.right,p,q);
        }else {
            return root;
        }


    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
}